%macro asignarcluster (ncluster=5 ,  data=, id=, raiz='OBS', nraiz=5 , asignadata=DATOSASIGNADOS);

proc sort data=&data; by &id; run; 

data dataobs; 
  set &data; 
  by &id; 
  if last.&id then output; 
 keep &id; 
 run; 

				/******I M L */
proc iml; 
use dataobs;
	read all var {&id} INTO OBSERVACIONES;    /**observaciones=identificacion observ.**/
    numobs=nrow(observaciones);

ASIGNAR=J(numobs,1,0); 

do j=1 to numobs; 
    asignar [j]=  ceil (ranuni(1298959)*&ncluster);  
end; 


raices=char(observaciones,&nraiz); 
texto=j(numobs,1,&raiz);                        /**vector con 'OBS'**/
columnas=texto+raices;   
solucion= observaciones ||asignar;              /**Matriz con observ y asignacion**/


create asignacion from solucion [colname={estacion asignado} rowname=columnas];
append from solucion [rowname=columnas];
close asignacion; 

quit;

proc print data=asignacion;run;


DATA &asignadata; 
	MERGE &DATA ASIGNACION; 
	BY &id; 
	DROP COLUMNAS; 
RUN; 

%mend asignarcluster; 
